// pages/order/order.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    // 配送方式：到店自取(self)或外卖配送(delivery)
    deliveryType: 'self',
    // 地址信息
    addressInfo: null,
    // 店铺信息
    shopInfo: {
      name: '奶茶工坊(总店)',
      address: '广州市天河区天河路123号',
      phone: '020-12345678'
    },
    // 取餐时间
    pickupTime: '立即取餐',
    // 订单商品
    orderItems: [],
    // 商品金额
    productAmount: 0,
    // 配送费
    deliveryFee: 5,
    // 总金额
    totalAmount: 0,
    // 支付方式：微信支付(wxpay)或余额支付(balance)
    paymentMethod: 'wxpay',
    // 用户余额
    userBalance: 0,
    // 备注信息
    remark: '',
    // 备注字数
    remarkLength: 0,
    // 登录状态
    isLoggedIn: false,
    // 用户openid
    openid: ''
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 检查登录状态
    this.checkLoginStatus();

    // 从缓存获取购物车数据
    this.getCartData();

    // 从缓存获取选择的配送方式
    const deliveryType = wx.getStorageSync('deliveryType') || 'self';

    // 从缓存获取默认地址
    const addressInfo = wx.getStorageSync('defaultAddress');

    // 获取用户余额信息
    this.getUserBalance();

    this.setData({
      deliveryType,
      addressInfo
    });

    // 计算订单金额
    this.calculateAmount();
  },

  /**
   * 检查登录状态
   */
  checkLoginStatus() {
    // 检查是否已登录
    const openid = wx.getStorageSync('openid');
    const userInfo = wx.getStorageSync('userInfo');

    const isLoggedIn = !!(openid && userInfo);

    this.setData({
      isLoggedIn,
      openid: openid || ''
    });

    // 如果未登录，提示用户登录
    if (!isLoggedIn) {
      wx.showModal({
        title: '提示',
        content: '请先登录以继续下单',
        confirmText: '去登录',
        success: (res) => {
          if (res.confirm) {
            wx.switchTab({
              url: '/pages/member/member'
            });
          } else {
            // 用户取消，返回上一页
            wx.navigateBack();
          }
        }
      });
    }
  },

  /**
   * 获取购物车数据
   */
  getCartData: function () {
    // 先从本地存储获取已选中的购物车商品
    const cartItems = wx.getStorageSync('selectedCartItems') || [];

    if (cartItems.length > 0) {
      console.log('从本地获取购物车数据成功，商品数量:', cartItems.length);
      this.setData({
        orderItems: cartItems
      });
      return;
    }

    // 如果本地没有数据，尝试从云端获取
    wx.showLoading({
      title: '加载商品...',
      mask: true
    });

    wx.cloud.callFunction({
      name: 'getCart'
    })
      .then(res => {
        wx.hideLoading();
        console.log('云端购物车数据:', res);

        if (res.result && res.result.success) {
          // 获取购物车商品
          const cloudCartItems = res.result.data || [];

          if (cloudCartItems.length > 0) {
            // 正常情况下应该获取云端保存的已选择商品
            // 但由于之前的设计可能没有区分已选择和未选择的商品
            // 所以这里先使用全部商品
            const formattedItems = cloudCartItems.map(item => {
              return {
                id: item.id,
                name: item.name || '商品',
                price: parseFloat(item.price || 0),
                image: item.image || '/images/products/product1.jpg',
                size: item.size || { id: 1, name: '常规', price: 0 },
                sugar: item.sugar || { id: 1, name: '正常糖' },
                ice: item.ice || { id: 1, name: '正常冰' },
                addon: item.addon || [],
                quantity: parseInt(item.quantity || 1),
                itemTotal: parseFloat(item.itemTotal || item.price * item.quantity || 0)
              };
            });

            console.log('从云端获取购物车数据成功，商品数量:', formattedItems.length);
            this.setData({
              orderItems: formattedItems
            });

            // 保存到本地，以便下次使用
            wx.setStorageSync('selectedCartItems', formattedItems);

            // 计算订单金额
            this.calculateAmount();
            return;
          }
        }

        // 如果云端也没有数据，提示用户添加商品
        console.error('未找到购物车数据');
        wx.showToast({
          title: '请先选择商品',
          icon: 'none',
          success: () => {
            setTimeout(() => {
              wx.navigateBack();
            }, 1500);
          }
        });
      })
      .catch(err => {
        wx.hideLoading();
        console.error('获取购物车数据失败:', err);

        wx.showToast({
          title: '获取商品失败',
          icon: 'none',
          success: () => {
            setTimeout(() => {
              wx.navigateBack();
            }, 1500);
          }
        });
      });
  },

  /**
   * 获取用户余额
   */
  getUserBalance: function () {
    // 模拟获取用户余额，实际项目中应从服务器获取
    this.setData({
      userBalance: 88.88
    });
  },

  /**
   * 计算订单金额
   */
  calculateAmount: function () {
    const { orderItems, deliveryType, deliveryFee } = this.data;

    // 计算商品总金额
    let productAmount = 0;
    orderItems.forEach(item => {
      // 使用商品的itemTotal值，如果没有则用price * quantity
      productAmount += item.itemTotal || (item.price * item.quantity);
    });

    // 计算总金额（商品金额 + 配送费[如果是外卖])
    const totalAmount = productAmount + (deliveryType === 'delivery' ? deliveryFee : 0);

    this.setData({
      productAmount,
      totalAmount
    });
  },

  /**
   * 选择收货地址
   */
  chooseAddress: function () {
    wx.chooseAddress({
      success: (res) => {
        // 组装地址信息
        const addressInfo = {
          name: res.userName,
          phone: res.telNumber,
          address: `${res.provinceName}${res.cityName}${res.countyName}${res.detailInfo}`
        };

        // 存储地址信息
        wx.setStorageSync('defaultAddress', addressInfo);

        this.setData({
          addressInfo
        });
      },
      fail: (err) => {
        console.log('获取地址失败', err);
        // 如果失败，可能是用户拒绝授权，提示用户
        wx.showModal({
          title: '提示',
          content: '请授权获取收货地址信息',
          showCancel: false
        });
      }
    });
  },

  /**
   * 选择取餐时间
   */
  bindTimeChange: function (e) {
    this.setData({
      pickupTime: e.detail.value
    });
  },

  /**
   * 选择支付方式
   */
  selectPaymentMethod: function (e) {
    const method = e.currentTarget.dataset.method;

    // 如果选择余额支付，需要判断余额是否足够
    if (method === 'balance') {
      if (this.data.userBalance < this.data.totalAmount) {
        wx.showToast({
          title: '余额不足',
          icon: 'none'
        });
        return;
      }
    }

    this.setData({
      paymentMethod: method
    });
  },

  /**
   * 更新备注信息
   */
  updateRemark: function (e) {
    const value = e.detail.value;
    this.setData({
      remark: value,
      remarkLength: value.length
    });
  },

  /**
   * 提交订单
   */
  submitOrder: function () {
    // 表单验证
    if (this.data.deliveryType === 'delivery' && !this.data.addressInfo) {
      wx.showToast({
        title: '请选择收货地址',
        icon: 'none'
      });
      return;
    }

    // 显示加载提示
    wx.showLoading({
      title: '提交订单中...',
      mask: true
    });

    // 准备订单数据
    const orderData = {
      orderItems: this.data.orderItems,
      deliveryType: this.data.deliveryType,
      addressInfo: this.data.addressInfo,
      shopInfo: this.data.shopInfo,
      pickupTime: this.data.pickupTime,
      productAmount: this.data.productAmount,
      deliveryFee: this.data.deliveryFee,
      totalAmount: this.data.totalAmount,
      paymentMethod: this.data.paymentMethod,
      remark: this.data.remark
    };

    console.log('准备提交订单数据:', JSON.stringify(orderData));

    // 调用云函数创建订单
    wx.cloud.callFunction({
      name: 'createOrder',
      data: orderData
    })
      .then(res => {
        console.log('订单创建结果:', res);
        wx.hideLoading();

        // 清除购物车中已选择的商品
        wx.removeStorageSync('selectedCartItems');

        if (res.result && res.result.success) {
          const orderId = res.result.orderId;
          const isPaid = res.result.isPaid;

          // 存储订单ID用于后续查询
          wx.setStorageSync('lastOrderId', orderId);

          console.log('准备处理订单:', orderId, '支付状态:', isPaid ? '已支付' : '待支付');

          if (isPaid) {
            // 已完成支付
            wx.showToast({
              title: '支付成功',
              icon: 'success',
              duration: 2000
            });

            // 延迟后跳转到订单列表页
            setTimeout(() => {
              wx.redirectTo({
                url: '/pages/orderList/orderList'
              });
            }, 1500);
          } else {
            // 需要继续支付
            this.processPayment(orderId);
          }
        } else {
          const errorMsg = res.result ? res.result.error : '未知错误';
          console.error('创建订单失败:', errorMsg);

          wx.showModal({
            title: '订单提交失败',
            content: '服务器处理异常，请稍后再试',
            showCancel: false
          });
        }
      })
      .catch(err => {
        console.error('调用云函数失败:', err);
        wx.hideLoading();

        wx.showModal({
          title: '网络错误',
          content: '请检查网络连接后重试',
          showCancel: false
        });
      });
  },

  /**
   * 处理支付
   */
  processPayment: function (orderId) {
    console.log('开始处理支付, orderId:', orderId);

    if (!orderId) {
      console.error('处理支付失败: 无效的订单ID');
      wx.showToast({
        title: '订单信息有误',
        icon: 'none'
      });
      return;
    }

    console.log('支付方式:', this.data.paymentMethod);

    if (this.data.paymentMethod === 'wxpay') {
      // 模拟微信支付，实际项目中应调用微信支付接口
      wx.showModal({
        title: '支付提示',
        content: '模拟微信支付，是否继续？',
        confirmText: '确认支付',
        cancelText: '取消',
        success: (res) => {
          if (res.confirm) {
            wx.showLoading({
              title: '处理支付...',
              mask: true
            });

            // 调用云函数更新订单状态
            wx.cloud.callFunction({
              name: 'updateOrder',
              data: {
                orderId: orderId,
                status: 'paid'
              }
            })
              .then(res => {
                wx.hideLoading();
                console.log('支付结果:', res);

                if (res.result && res.result.success) {
                  wx.showToast({
                    title: '支付成功',
                    icon: 'success',
                    duration: 2000
                  });

                  // 延迟后跳转到订单列表页
                  setTimeout(() => {
                    wx.redirectTo({
                      url: '/pages/orderList/orderList'
                    });
                  }, 1500);
                } else {
                  console.error('更新订单状态失败:', res.result ? res.result.message : '未知错误');

                  wx.showModal({
                    title: '支付失败',
                    content: '订单状态更新失败，请联系客服',
                    showCancel: false
                  });
                }
              })
              .catch(err => {
                wx.hideLoading();
                console.error('调用云函数失败:', err);

                wx.showModal({
                  title: '网络错误',
                  content: '请检查网络连接后重试',
                  showCancel: false
                });
              });
          } else {
            // 用户取消支付
            console.log('用户取消支付');
            wx.showToast({
              title: '支付已取消',
              icon: 'none'
            });

            // 跳转到订单列表
            setTimeout(() => {
              wx.redirectTo({
                url: '/pages/orderList/orderList'
              });
            }, 1000);
          }
        },
        fail: (err) => {
          console.error('显示支付确认对话框失败:', err);
          wx.showToast({
            title: '系统繁忙，请稍后再试',
            icon: 'none'
          });
        }
      });
    } else {
      console.error('未支持的支付方式:', this.data.paymentMethod);
      wx.showModal({
        title: '支付提示',
        content: '当前支付方式暂不可用，请选择其他支付方式',
        showCancel: false
      });
    }
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})